// 云函数：proxyDownload
// 作用：备用下载方案，仅处理小文件或直接下载失败的情况
const cloud = require('wx-server-sdk');

cloud.init({
  env: 'cloud1-6g22e569b6b129d5'
});

exports.main = async (event) => {
  const { url } = event;
  
  if (!url) {
    console.error('❌ 没有传入视频链接');
    return { success: false, msg: '缺少url参数' };
  }

  console.log(`[proxyDownload] 开始处理: ${url.substring(0, 100)}...`);

  try {
    const axios = require('axios');
    
    // 先检查文件大小
    let contentLength = 0;
    try {
      const headResponse = await axios.head(url, { 
        timeout: 5000,
        maxRedirects: 5
      });
      contentLength = parseInt(headResponse.headers['content-length'] || '0');
      console.log(`[文件大小] ${(contentLength / 1024 / 1024).toFixed(2)} MB`);
    } catch (headError) {
      console.warn('无法获取文件大小，继续尝试下载:', headError.message);
    }
    
    // 限制：超过 20MB 拒绝处理（避免超时）
    const maxSize = 20 * 1024 * 1024; // 20MB
    if (contentLength > maxSize) {
      return {
        success: false,
        msg: `文件过大 (${(contentLength / 1024 / 1024).toFixed(2)}MB)，请使用直接下载方式`,
        fileSize: contentLength,
        maxSize: maxSize
      };
    }

    console.log('[开始下载] 使用 axios 下载文件...');
    
    // 下载文件（设置较长超时，但不超过云函数限制）
    const response = await axios.get(url, {
      responseType: 'arraybuffer',
      timeout: 50000, // 50秒超时
      maxContentLength: maxSize,
      onDownloadProgress: (progressEvent) => {
        if (progressEvent.total) {
          const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
          if (percent % 20 === 0) {
            console.log(`[下载进度] ${percent}%`);
          }
        }
      }
    });

    console.log(`[下载完成] 文件大小: ${(response.data.length / 1024 / 1024).toFixed(2)} MB`);

    // 上传到云存储
    const fileName = `videos/${Date.now()}_backup.mp4`;
    console.log(`[开始上传] ${fileName}`);
    
    const uploadResult = await cloud.uploadFile({
      cloudPath: fileName,
      fileContent: Buffer.from(response.data),
    });

    console.log(`[上传成功] fileID: ${uploadResult.fileID}`);
    
    return { 
      success: true, 
      fileID: uploadResult.fileID,
      method: 'cloud-proxy',
      fileSize: response.data.length
    };

  } catch (error) {
    console.error('❌ 云函数处理失败:', error);
    
    // 详细的错误信息
    let errorMsg = '处理失败';
    if (error.code === 'ECONNABORTED') {
      errorMsg = '下载超时，文件可能过大';
    } else if (error.response) {
      errorMsg = `服务器错误: ${error.response.status}`;
    } else if (error.message) {
      errorMsg = error.message;
    }
    
    return { 
      success: false, 
      msg: errorMsg,
      error: error.toString(),
      suggestion: '建议使用直接下载方式或联系管理员'
    };
  }
};